package com.softer.chengxin.excel.dao;

import com.softer.chengxin.excel.dao.provider.ReportDaoProvider;
import com.softer.chengxin.excel.domin.ExportExcel;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * @author Gong Zhiyang
 * @date 2019/2/27
 */
@Mapper
@Repository
public interface ReportDao {
    /**
     * 查询企业数量
     *
     * @param fields      参数
     * @param area        管理区域
     * @param roleId      角色ID
     * @param exportExcel 查询条件
     * @return 数量
     */
    @SelectProvider(type = ReportDaoProvider.class, method = "getCorpNum")
    List<Map<String, Object>> getCorpNum(@Param("fields") String fields,
                                         @Param("area") String area,
                                         @Param("roleId") Integer roleId,
                                         @Param("exportExcel") ExportExcel exportExcel);

    /**
     * 查询项目数量
     *
     * @param fields      参数
     * @param area        管理区域
     * @param roleId      角色ID
     * @param exportExcel 查询条件
     * @return 数量
     */
    @SelectProvider(type = ReportDaoProvider.class, method = "getProjectNum")
    List<Map<String, Object>> getProjectNum(@Param("fields") String fields,
                                            @Param("area") String area,
                                            @Param("roleId") Integer roleId,
                                            @Param("exportExcel") ExportExcel exportExcel);

    /**
     * 查询三体系认证数量
     *
     * @param fields      参数
     * @param area        管理区域
     * @param roleId      角色ID
     * @param exportExcel 查询条件
     * @param value       具体的值
     * @param param       类型参数（通过认证，未通过认证）
     * @return 数量
     */
    @SelectProvider(type = ReportDaoProvider.class, method = "getThreeSystemNum")
    List<Map<String, Object>> getThreeSystemNum(@Param("fields") String fields,
                                                @Param("area") String area,
                                                @Param("roleId") Integer roleId,
                                                @Param("exportExcel") ExportExcel exportExcel,
                                                @Param("value") String value,
                                                @Param("param") String param);

    /**
     * 党组织数量
     *
     * @param fields      参数
     * @param area        管理区域
     * @param roleId      角色ID
     * @param exportExcel 查询条件
     * @param value       具体的值
     * @param param       类型参数（建立党组织，未建立党组织）
     * @return 数量
     */
    @SelectProvider(type = ReportDaoProvider.class, method = "getOrganizationNum")
    List<Map<String, Object>> getOrganizationNum(@Param("fields") String fields,
                                                 @Param("area") String area,
                                                 @Param("roleId") Integer roleId,
                                                 @Param("exportExcel") ExportExcel exportExcel,
                                                 @Param("value") String value,
                                                 @Param("param") String param);

    /**
     * 收入数量
     *
     * @param fields      参数
     * @param area        管理区域
     * @param roleId      角色ID
     * @param exportExcel 查询条件
     * @param param       类型参数
     * @return 数量
     */
    @SelectProvider(type = ReportDaoProvider.class, method = "getIncome")
    List<Map<String, Object>> getIncome(@Param("fields") String fields,
                                        @Param("area") String area,
                                        @Param("roleId") Integer roleId,
                                        @Param("exportExcel") ExportExcel exportExcel,
                                        @Param("param") String param);

    /**
     * 企业人数
     *
     * @param fields      参数
     * @param area        管理区域
     * @param roleId      角色ID
     * @param exportExcel 查询条件
     * @param param       类型参数
     * @return 数量
     */
    @SelectProvider(type = ReportDaoProvider.class, method = "getCorpPersonNum")
    List<Map<String, Object>> getCorpPersonNum(@Param("fields") String fields,
                                               @Param("area") String area,
                                               @Param("roleId") Integer roleId,
                                               @Param("exportExcel") ExportExcel exportExcel,
                                               @Param("param") String param);

    /**
     * 项目人数
     *
     * @param fields      参数
     * @param area        管理区域
     * @param roleId      角色ID
     * @param exportExcel 查询条件
     * @param param       类型参数
     * @return 数量
     */
    @SelectProvider(type = ReportDaoProvider.class, method = "getProjectPersonNum")
    List<Map<String, Object>> getProjectPersonNum(@Param("fields") String fields,
                                                  @Param("area") String area,
                                                  @Param("roleId") Integer roleId,
                                                  @Param("exportExcel") ExportExcel exportExcel,
                                                  @Param("param") String param);

    /**
     * 各个等级数量
     *
     * @param fields      参数
     * @param area        管理区域
     * @param roleId      角色ID
     * @param exportExcel 查询条件
     * @param param       类型参数
     * @param level       等级的值
     * @return 数量
     */
    @SelectProvider(type = ReportDaoProvider.class, method = "getLevelNum")
    List<Map<String, Object>> getLevelNum(@Param("fields") String fields,
                                          @Param("area") String area,
                                          @Param("roleId") Integer roleId,
                                          @Param("exportExcel") ExportExcel exportExcel,
                                          @Param("param") String param,
                                          @Param("level") String level);

    /**
     * 黑名单数量
     *
     * @param fields      参数
     * @param area        管理区域
     * @param roleId      角色ID
     * @param exportExcel 查询条件
     * @param param       类型参数
     * @return 数量
     */
    @SelectProvider(type = ReportDaoProvider.class, method = "getBlackList")
    List<Map<String, Object>> getBlackList(@Param("fields") String fields,
                                           @Param("area") String area,
                                           @Param("roleId") Integer roleId,
                                           @Param("exportExcel") ExportExcel exportExcel,
                                           @Param("param") String param);

    /**
     * 各个面积
     *
     * @param fields      参数
     * @param area        管理区域
     * @param roleId      角色ID
     * @param exportExcel 查询条件
     * @param param       类型参数
     * @param parameter   数据库参数字段
     * @return 数量
     */
    @SelectProvider(type = ReportDaoProvider.class, method = "getProjectArea")
    List<Map<String, Object>> getProjectArea(@Param("fields") String fields,
                                             @Param("area") String area,
                                             @Param("roleId") Integer roleId,
                                             @Param("exportExcel") ExportExcel exportExcel,
                                             @Param("param") String param,
                                             @Param("parameter") String parameter);

    /**
     * 住房数量
     *
     * @param fields      参数
     * @param area        管理区域
     * @param roleId      角色ID
     * @param exportExcel 查询条件
     * @param param       类型参数
     * @return 数量
     */
    @SelectProvider(type = ReportDaoProvider.class, method = "getHouseNum")
    List<Map<String, Object>> getHouseNum(@Param("fields") String fields,
                                          @Param("area") String area,
                                          @Param("roleId") Integer roleId,
                                          @Param("exportExcel") ExportExcel exportExcel,
                                          @Param("param") String param);

    /**
     * 业委会数量
     *
     * @param fields      参数
     * @param area        管理区域
     * @param roleId      角色ID
     * @param exportExcel 查询条件
     * @param param       类型参数
     * @return 数量
     */
    @SelectProvider(type = ReportDaoProvider.class, method = "getProprietor")
    List<Map<String, Object>> getProprietor(@Param("fields") String fields,
                                            @Param("area") String area,
                                            @Param("roleId") Integer roleId,
                                            @Param("exportExcel") ExportExcel exportExcel,
                                            @Param("param") String param);

    /**
     * 信息数量
     *
     * @param fields      参数
     * @param area        管理区域
     * @param roleId      角色ID
     * @param exportExcel 查询条件
     * @param param       类型参数
     * @param value       信息类型值
     * @return 数量
     */
    @SelectProvider(type = ReportDaoProvider.class, method = "getInfoNum")
    List<Map<String, Object>> getInfoNum(@Param("fields") String fields,
                                         @Param("area") String area,
                                         @Param("roleId") Integer roleId,
                                         @Param("exportExcel") ExportExcel exportExcel,
                                         @Param("param") String param,
                                         @Param("value") int value);

    /**
     * 教育数量
     *
     * @param fields      参数
     * @param area        管理区域
     * @param roleId      角色ID
     * @param exportExcel 查询条件
     * @param param       类型参数
     * @param parameter   数据库参数字段
     * @param value       具体的值
     * @return 数量
     */
    @SelectProvider(type = ReportDaoProvider.class, method = "getTrainNum")
    List<Map<String, Object>> getTrainNum(@Param("fields") String fields,
                                          @Param("area") String area,
                                          @Param("roleId") Integer roleId,
                                          @Param("exportExcel") ExportExcel exportExcel,
                                          @Param("param") String param,
                                          @Param("parameter") String parameter,
                                          @Param("value") String value);
}
